// pages/project/project.js
//正常的版本
Page({
  /**
   * 页面的初始数据
   */
  data: {
    projectList: [],
    userInfo: "", //缓存的用户数据
    sessionID: "",
    loginFlag: "",
    chuangNum: "",
    captainFlag: "0", //标志显示0表示“我参加的”，1表示“我负责的”
    showPrivacy:false,
  },
  // 用于设置总页数
  totalPages: 1,
  //前往我参加的
  gotoMycharge(e) {
    this.setData({
      captainFlag: 1,
    })
    this.Parameters.teamType = 1
    this.updateProjectList()
  },
  //前往我负责的
  gotoMyjoin(e) {
    this.setData({
      captainFlag: 0,
    })
    this.Parameters.teamType = 0
    this.updateProjectList()
  },

  // 用于设置POST请求需要携带的参数
  Parameters: {
    pageParam: {
      orderBy: "id asc",
      pageNum: 1,
      pageSize: 5,
    },
    teamType: 0,
  },
  //该函数用于更新projectList
  updateProjectList() {
    this.Parameters.pageParam.pageNum = 1
    wx.request({
      url: "https://www.hschuangsai.com/user/team",
      header: {
        "content-type":
          "application/json",
        session:
          this.data.sessionID,
      },
      data: this.Parameters,
      method: "POST",
      success: result => {
        if (
          result.data.code ==
          -1
        ) {
          //会话失效
          wx.showToast({
            title:
              result.data
                .commonErrorCode
                .errorSuggestion,
            icon: "none",
          })
        } else {
          console.log(
            "项目列表",
            result.data.data
          )
          this.totalPages =
            result.data.data.pages
          this.setData({
            projectList:
              result.data.data
                .list,
          })
        }
      },
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    wx.onNeedPrivacyAuthorization((resolve, eventInfo) => {
      console.log('触发本次事件的接口是：' + eventInfo.referrer)
      // 需要用户同意隐私授权时
      // 弹出开发者自定义的隐私授权弹窗
      this.setData({
        showPrivacy: true
      })
      this.resolvePrivacyAuthorization = resolve
    })

    this.setData({
      userInfo:
        wx.getStorageSync(
          "userInfo"
        ), // 用户的微信头像、昵称等信息
      loginFlag:
        wx.getStorageSync(
          "loginFlag"
        ), // 判断是否登录，登录为1，未登录为0或空
      sessionID:
        wx.getStorageSync(
          "sessionID"
        ),
      chuangNum:
        wx.getStorageSync(
          "chuangNum"
        ),
    })
    if (
      this.data.loginFlag == 1
    ) {
      this.updateProjectList()
    }
  },

  handleAgreePrivacyAuthorization() {
    // 用户点击同意按钮后
    this.resolvePrivacyAuthorization({ buttonId: 'agree-btn', event: 'agree' })
    // 用户点击同意后，开发者调用 resolve({ buttonId: 'agree-btn', event: 'agree' })  告知平台用户已经同意，参数传同意按钮的id。为确保用户有同意的操作，基础库在 resolve 被调用后，会去检查对应的同意按钮有没有被点击过。检查通过后，相关隐私接口会继续调用
    // 用户点击拒绝后，开发者调用 resolve({ event:'disagree' }) 告知平台用户已经拒绝
  },

  myShowModal() {
    console.log(
      "in myShowModal"
    )
    wx.showModal({
      title: "提示",
      content:
        "登录后查看更多，是否登录？",
      success: res => {
        // 确定
        if (res.confirm) {
          console.log("确定")
          this.logIn()
        }
        // 取消
        else {
          wx.showToast({
            title:
              "跳转到首页",
            icon: "none",
            duration: 1500,
          })
          wx.switchTab({
            url: "../notice/notice",
          })
        }
      },
    })
  },
  // 登录
  logIn() {
    // 如果userInfo为空，则未确认过微信授权弹窗，即首次登录
    if (!this.data.userInfo) {
      // 微信授权弹窗
      wx.getUserProfile({
        desc: "用于获取用户头像和昵称",
        // 用户点击确认
        success: res => {
          let userInfo =
            res.userInfo
          wx.setStorageSync(
            "userInfo",
            userInfo
          ) // 缓存userInfo
          this.myLogin() // 进行登录
        },
        // 用户点击取消
        fail: res => {
          wx.showToast({
            title:
              "跳转到首页",
            icon: "none",
            duration: 1500,
          })
          wx.switchTab({
            url: "../notice/notice",
          })
        },
      })
    }
    // 非首次登录
    else {
      this.myLogin() // 重新登录
    }
  },

  // wx.login()封装
  myLogin() {
    console.log("in mylogin")
    wx.login({
      success: res => {
        wx.request({
          url:
            "https://www.hschuangsai.com/user/login/" +
            res.code,
          method: "GET",
          success: res => {
            let sessionID =
              res.data.data
                .sessionId
            wx.setStorageSync(
              "sessionID",
              sessionID
            ) // 缓存sessionID
            wx.setStorageSync(
              "loginFlag",
              1
            ) // 缓存loginFlag
            wx.setStorageSync(
              "chuangNum",
              res.data.data
                .chuangNum
            )
            this.setData({
              sessionID:
                sessionID,
              loginFlag: 1,
            })

            wx.showToast({
              title:
                "成功登录",
              icon: "none",
              duration: 1500,
            })

            this.updateProjectList()
          },
        })
      },
    })
  },

  // 该方法可解决小程序tabbar点击切换不触发生命周期钩子
  onTabItemTap(e) {
    this.setData({
      userInfo:
        wx.getStorageSync(
          "userInfo"
        ), // 用户的微信头像、昵称等信息
      loginFlag:
        wx.getStorageSync(
          "loginFlag"
        ), // 判断是否登录，登录为1，未登录为0或空
      sessionID:
        wx.getStorageSync(
          "sessionID"
        ),
      chuangNum:
        wx.getStorageSync(
          "chuangNum"
        ),
    })
    // 如果未登录，则显示遮罩和提示
    if (
      this.data.loginFlag != 1
    ) {
      this.setData({
        projectList: [],
      })
      this.myShowModal()
    }
    if (
      this.data.loginFlag ==
      "1"
    ) {
      this.updateProjectList()
    }
  },

  //监听触底
  onReachBottom: function () {
    if (
      this.Parameters
        .pageParam.pageNum >=
      this.totalPages
    ) {
      //console.log('加载失败'）
      return
    } else {
      this.Parameters.pageParam.pageNum += 1
      wx.request({
        url: "https://www.hschuangsai.com/user/team",
        header: {
          "content-type":
            "application/json",
          session:
            this.data
              .sessionID,
        },
        data: this.Parameters,
        method: "POST",
        success: result => {
          this.setData({
            projectList: [
              ...this.data
                .projectList,
              ...result.data
                .data.list,
            ],
          })
        },
      })
    }
  },
})
